Centralized print driver distribution in a distributed printing environment

ABSTRACT

Methods, systems, and devices are described for centralized print driver distribution in a distributed printing environment. A set of drivers may be stored at one or more centralized data stores, and distributed to print servers. This distribution may occur on a per-print job basis. Drivers may be automatically removed from the print servers based on certain criteria.

CROSS REFERENCES

The present application claims priority from U.S. Provisional PatentApplication Ser. No. 61/394,264, which is incorporated herein byreference in its entirety for all it discloses.

BACKGROUND

Embodiments of the invention relate to computer network communication,and more particularly, printing in a dynamic roaming environment.Organizations often use a variety of computing devices. Various computersystems may use a thin-client or a virtual desktop display inconjunction with a centralized server or mainframe, and also usetraditional workstations and handheld devices.

A thin-client may be a computing device that includes hardware,software, or both in a client-server architecture network. However, sucha network may use a central server for processing and may transmit andreceive input and output over a network or other communication mediumestablished between the device and the remote server. In some examples,a thin-client device may run web browsers or remote desktop software,such that significant processing may occur on the server.

Printing in such environments may present a number of significantchallenges. Traditionally, print drivers are stored and maintained oneach device, and this can cause administrative overhead and maintenanceissues. The problem may be exacerbated with mobile thin-clients andother mobile devices, as the number of drivers that may need to bestored can increase substantially as more printers become available.

There are also challenges related to selecting the right printer andprint server in a dynamic environment. For example, with a mobile deviceor a roaming user, it may be a challenge to identify the appropriateprinters because of the legacy architecture for printing networks. Also,because of the traditional ways printer networks communicate, feedbackfor print jobs and identifying available printers can presentchallenges, as well. Thus, there may be a need in the art for novelsystem architectures to address one or more of these issues.

SUMMARY

Methods, systems, and devices are described for centralized driverdistribution in a distributed printing environment.

In one set of embodiments, a distributed printing system includes a datastore, a central server computer system, and a print server. The datastore stores multiple drivers. The central server computer systemreceives notification of a print job and selects a driver from the datastore based on the received notification of the print job. The printserver receives the selected driver from the central server computersystem and transmits the print job to a printer using the selecteddriver.

In another set of embodiments, a method of printing in a distributedprinting environment includes storing drivers at a centralized datastore. Notification is received of a print job, and a driver is selectedfrom the centralized data store based on the received notification. Thedriver corresponds to a printer. The selected driver is transmitted to aprint server in communication with the printer.

In another set of embodiments, a method of printing in a distributedprinting environment includes receiving, at a print server, a driverselected for a print job from a centralized data store external to theprint server. The selected driver is installed on the print server, andthe print job is transmitted from the print server to a printer usingthe selected driver.

BRIEF DESCRIPTION OF THE DRAWINGS

A further understanding of the nature and advantages of the presentinvention may be realized by reference to the following drawings. In theappended figures, similar components or features may have the samereference label. Further, various components of the same type may bedistinguished by following the reference label by a dash and a secondlabel that distinguishes among the similar components. If only the firstreference label is used in the specification, the description isapplicable to any one of the similar components having the same firstreference label irrespective of the second reference label.

FIG. 1 is a block diagram illustrating a system for distributed printingin a dynamic roaming and traditional static environments, according tovarious embodiments of the invention.

FIG. 2 is a block diagram illustrating a central server computer systemin a system for distributed printing in a dynamic roaming andtraditional static environments, according to various embodiments of theinvention.

FIG. 3 is a block diagram illustrating a data store in a system fordistributed printing in a dynamic roaming and traditional staticenvironments, according to various embodiments of the invention.

FIG. 4 is a block diagram illustrating a backend in a system fordistributed printing in a dynamic roaming and traditional staticenvironments, according to various embodiments of the invention.

FIG. 5 is a block diagram illustrating a logical path taken by printdata in a system for distributed printing in a dynamic roaming andtraditional static environments, according to various embodiments of theinvention.

FIG. 6 is a block diagram illustrating a system for centralized printdriver distribution in a distributed printing environment, according tovarious embodiments of the invention.

FIG. 7 is a block diagram illustrating a system for centralized printdriver distribution in a distributed printing environment, according tovarious embodiments of the invention.

FIG. 8 is a block diagram illustrating a central server computer systemin a distributed printing environment, according to various embodimentsof the invention.

FIG. 9 is a block diagram illustrating a print server in a distributedprinting environment, according to various embodiments of the invention.

FIG. 10 is a flowchart diagram illustrating a method of printing in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 11 is a flowchart diagram illustrating a method of printing in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 12 is a flowchart diagram illustrating a method of printing in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 13 is a flowchart diagram illustrating a method of printing in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 14 is a flowchart diagram illustrating a method of printing in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 15 is a flowchart diagram illustrating a method of printing in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 16 is a flowchart diagram illustrating a method of printing in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 17 is a flowchart diagram illustrating a method of printing in adistributed printing environment, according to various embodiments ofthe invention.

FIG. 18 is a schematic diagram that illustrates a representative devicestructure that may be used in various embodiments of the presentinvention.

DETAILED DESCRIPTION OF THE INVENTION

The present description sets forth examples of systems, methods, anddevices for centralized driver distribution in a distributed printingenvironment. In these systems, methods, and devices, drivers forprinters and other devices in a distributed printing environment may bestored and distributed from a central device or system. When anotification of a print job is received at the central device or system,one of the stored drivers may be selected and provided to a print serverfor the print job based on the received notification.

This description provides examples, and is not intended to limit thescope, applicability or configuration of the invention. Rather, theensuing description will provide those skilled in the art with anenabling description for implementing embodiments of the invention.Various changes may be made in the function and arrangement of elements.

Thus, various embodiments may omit, substitute, or add variousprocedures or components as appropriate. For instance, it should beappreciated that the methods may be performed in an order different thanthat described, and that various steps may be added, omitted orcombined. Also, aspects and elements described with respect to certainembodiments may be combined in various other embodiments. It should alsobe appreciated that the following systems, methods, devices, andsoftware may individually or collectively be components of a largersystem, wherein other procedures may take precedence over or otherwisemodify their application.

Systems, devices, methods, and software are described for printingwithin a distributed printing environment. In one set of embodiments,shown in FIG. 1, system 100 includes a central server computer system105, a data store 110, print servers 145, and printers 150. Each ofthese components may be in communication with each other, directly orindirectly.

The central server computer system 105 may include a rules engine 130, asession manager 135, and a print router 140. The central server computersystem 105 may be made up of one or more server computers, workstations,web servers, or other suitable computing devices. The central servercomputer system 105 may be fully located within a single facility ordistributed geographically, in which case a network may be used tointegrate different components.

The central server computer system 105 may receive a print job. Theprint job may be received from a windows session 125. Alternatively, theprint job may be received from an application session 115 via a backend120. The print job may also or alternatively be received from anapplication session 115 via a cloud computing environment (notspecifically shown). The print job may be received from thin-clients(e.g., SUN RAY clients available from Oracle Corporation, WYSE clientsavailable from Wyse Technology, etc.), thick clients (e.g., desktops,laptops), mobile devices, tablets, etc., although these devices are notspecifically shown in the diagram Moreover, the print job may bereceived from any type of desktop or virtual desktop environment.Examples of suitable desktop environments from which the print job maybe received include, but are not limited to, LINUX environments based onthe open-source Linux kernel; WINDOWS environments based on softwareavailable from Microsoft, Inc.; OS/X environments based on softwareavailable from Apple, Inc.; VMWARE virtual environments based onsoftware available from VMware, Inc.; CITRIX virtual environments basedon software available from Citrix Systems, Inc.; Windows TerminalServices/Remote Desktop virtual environments based on software availablefrom Microsoft, Inc.; ANDROID environments based on software availablefrom Google, Inc.; IOS environments based on software available fromApple, Inc.; WEBOS environments based on software available from HewlettPackard Company; combinations thereof; and the like. In someembodiments, the central server computer system 105 may receive noticeor identification for a print job, and perform the functionalitydescribed herein based on such notice or identification only.

A set of drivers may be stored at data store 110. Data store 110 may bea single database, or may be made up of any number of separate anddistinct databases. The data store 110 may include one, or more,relational databases or components of relational databases (e.g.,tables), object databases, or components of object databases,spreadsheets, text files, internal software lists, or any other type ofdata structure suitable for storing data. Thus, it should be appreciatedthat a data store 110 may each be multiple data storages (of the same ordifferent type), or may share a common data storage with other datastores. Although in some embodiments the data store 110 may be distinctfrom a central server computer system 105, in other embodiments it maybe integrated therein to varying degrees.

As noted above, notification of a requested print job may be received atthe central server computer system 105. A session manager 135 mayreceive the notification, and may assign a terminal identifier (TID) toa device requesting the job. The central server computer system 105 mayidentify information about the print job (e.g., identification andlocation of the applicable print server 145 and printer 150, andidentification of the proper driver). Drivers for the print job may betransmitted to the appropriate print server 145 and to the client devicerequesting the job. The drivers may be installed, and the device andprint server 145 may execute the print job with the installed drivers.Thus, the central server computer system 105 may access the data store110 to distribute drivers to the print server 145 or the device, andthus in some embodiments the drivers do not need to be maintained oneach device or print server 145. The drivers may be taken down oruninstalled after each job, set of jobs, or period with no use.

It should be understood that the print servers 145 may be any real orvirtual machine or environment that hosts a print driver for controllinga printer 150. Thus, in certain examples a print server 145 may beimplemented by circuitry, logic, and/or software within the printer 150.Additionally or alternatively, a print server 145 may include a real orvirtual network server and/or a personal computing device incommunication with a printer 150.

In some embodiments, the central server computer system 105 may use theinformation about a print job to identify an appropriate operatingsystem (OS) and print driver for the print server for a given print job.The central server computer system 105 may access the data store 110 toretrieve the OS and print driver, and load an OS in real-time inresponse to receiving a print job. The central server computer system105 may install the appropriate driver, thus creating a virtual printserver (which may, but need not be, print server 145). The virtual printserver executes the print job. After the print job is complete, thedriver and OS may be taken down. In alternative embodiments, printservers may not be dynamically generated in response to individual printjobs or even at all. For example, the central server computer system 105may distribute incoming print jobs among a fixed set of physical orvirtual print servers 145.

In some embodiments, a printer 150 is selected (e.g., automatically orby a user). The print router 140 at the central server computer system105 may receive the selection. At the print router140, the selectedprinter may be mapped to a 1) driver of a table of drivers, and 2) aprint server 145 of a table of print servers. In certain examples, thismapping may be performed based on static relationships between printers,drivers, and print servers. For example, these static relationships maybe stored as tables within the data store 110.

Additionally or alternatively, a rules engine 130 at the central servercomputer system 105 may be used in the selection of the printer. Therules engine 130 may be configured to dynamically map a print job to aprint server 145 and printer 150 for the print job. By way of example,upon notification or receipt of the print job, the rules engine 130 mayaccess a set of rules to determine the correct print server 145 andprinter 150 for the print job. The rules may dynamically make thisdetermination based on the location of the device. The type of device,attributes of the print job, and other factors may be used by the rulesengine 130 to determine the correct type and location for the printserver 145 and printer 150. This rules engine 130 functionality may notbe necessary in all embodiments of the invention to identify anappropriate printer 150, print server 145, or driver for a print job.Accordingly, the rules engine 130 may be eliminated from certainembodiments.

In some embodiments, feedback from a printer 150 is received at theprint server 145, and then forwarded on to a print router 140. The printrouter 140 may route the feedback (e.g., job failed, out of ink, out ofpaper, etc.) to the client device. This report may be in the form of adialogue box. The feedback may be routed to avoid the backend 120, evenwhen the print job is initially routed through the backend 120. Inresponse to feedback from a print router 140, a client device may director route a print job. This routing may be to a new printer, or may callup alternative functionality (e.g., a new tray) for a printer that isalready in use. Thus, instead of unidirectional printing, print jobs(e.g., sent through a backend 120) may be controlled by two-waycommunication between the print router 140 and the device.

The components of the system 100 may be directly connected, or may beconnected via a network (not shown), which may be any combination of thefollowing: the Internet, an IP network, an intranet, a wide-area network(“WAN”), a local-area network (“LAN”), a virtual private network, thePublic Switched Telephone Network (“PSTN”), or any other type of networksupporting data communication between devices described herein, indifferent embodiments. A network may include both wired and wirelessconnections, including optical links. Many other examples are possibleand apparent to those skilled in the art in light of this disclosure. Inthe discussion herein, a network may or may not be noted specifically.If no specific means of connection is noted, it may be assumed that thelink, communication, or other connection between devices may be via anetwork.

Session manager 135 may include an API architecture which serves as thecommunication control point, managing virtual desktop sessions andbrokering sessions for clients to backend 120 virtual desktop andapplication sessions. The session manager 135 may broker and passthrough mechanisms for client devices to active virtual sessions. Thecentral server computer system 105 may include a centralized managementconsole (not shown), which may be a web-based management console forconfiguration, real time monitoring, and reporting. There may bemanagement capabilities for the entire virtual desktop/applicationenvironment.

FIG. 2 shows a block diagram of a central server computer system 105-a.The central server computer system 105-a may be one example of thecentral server computer system 105 in FIG. 1. The central servercomputer system 105-a shown in FIG. 2 includes a rules engine 130, asession manager 135, a print router 140-a, and a print server manager205. The rules engine 130 and the session manager 135 shown in FIG. 2may be substantially the same as the rules engine 130 and the sessionmanager 135 shown in FIG. 1. The print router 140-a may be one exampleof the print router 140 shown in FIG. 1.

The print router 140-a may match print jobs received from externalsessions 115, 125 to one or more destination printers 150 and/or printservers 145. To accomplish these tasks, the print router 140-a mayinclude at least a print data receiving module 210, a print sourceidentification module 215, a print parameters identification module 220,a printer destination identification module 225, and a printer feedbackrouting module 230.

The print data receiving module 210 may be configured to receive printdata corresponding to a print job from an external session 115, 125 viaa communication channel established by the session manager 135. Incertain embodiments, the print data received from the external session115, 125 may be in the form of one or more page description languages(PDLs). Examples of page description languages that may be received atthe receiving module 210 include, but are not limited to, PostScript,Portable Document Format (PDF), Printer Command Language (PCL), ScalableVector Graphics (SVG), Open XML Paper Specification (XPS), and any otherpage description language that may suit a particular implementation ofthe principles described herein.

In other embodiments, the print data received from the external session115, 125 may be in the form of text or images for use with a standardtemplate stored by a print server 145 or a printer 150. For example, theprint data may be used to print a personalized bracelet worn by apatient in a medical facility. In this example, the print data mayinclude text corresponding to the name of the patient, and the name ofthe patient's doctor. This text, when received by a print server 145 ora printer 150, may be applied to a standard bracelet template to print abracelet having the name of the patient and the name of the patient'sdoctor.

In additional or alternative embodiments, the print data received by theprint data receiving module 210 may be in the form of an image that hasalready been rasterized by the external session 115, 125 in preparationfor delivery to a printer 150.

The print data receiving module 210 may be configured to cache thereceived print data at a designated storage area. In certain examples,the designated storage area may be in a data store 110. The cached printdata may be accessible to the rules engine 130 or any other module orprocess.

The print source identification module 215 may be configured to analyzethe received print data to determine certain attributes orcharacteristics of the received print data. These attributes orcharacteristics may also be stored for use by the other modules orprocesses. For example, the print source identification module 215 mayassociate the received print data with a format in the data store 110.This format information may be available to the rules engine 130 for usein enforcing one or more rule sets.

In certain examples, the print source identification module 215 mayanalyze the print data received by the print data receiving module 210to determine a source of the print data. By way of example, the sourcemay be determined using information from the session manager 135,information acquired by the print data receiving module 210, and/orinformation attached to the print data itself by the source. Once theprint source has been identified, the identity of the print source maybe associated with the received print data. For example, the identity ofthe print source may be stored in the data store 110.

The print parameters identification module 220 may identify certainprint parameters for the received print data. These print parameters maybe included with the received print data and/or determined by logicaldeduction (e.g., using the rules engine 130). For instance, a user of anexternal session 115, 125 may specify a particular print parameter whichmay be transmitted to the central server computer system 105-a with theprint data or logically deduced from the received print data.Additionally or alternatively, certain default print parameters may bedetermined for the print data based on the identity of the source of theprint data and/or another attribute associated with the print data.

Examples of print parameters that may be identified by the printparameters identification module 220 include, but are not limited to, aselected type of printing media, a selected size of printing media, aselected source of printing media, an ink or toner color setting, acollation setting, a staple setting, a duplex setting, a scalingsetting, combinations thereof, and the like.

The printer destination identification module 225 may be configured toidentify an appropriate destination printer 150 and/or print server 145for print data received at the print data receiving module 210. Theprinter destination identification module 225 may identify theappropriate destination printer 150 based on one or more attributes ofthe print data.

In certain examples, the printer destination identification module 225may pass certain attributes of the print data (e.g., the identity and/orlocation of the source of the print data determined by the print sourceidentification module 215, the print parameters determined by the printparameters identification module 220, etc.) to the rules engine 130. Therules engine 130 may apply a certain set of predetermined or dynamicallyupdated rules to the input it receives from the printer destinationidentification module 225 to determine the destination printer 150and/or print server 145 for the print data. The destination printer 150and/or print server 145 determined by the rules engine 130 may then bereturned to the printer destination identification module 225.

Alternatively, instead of using a rules engine 130, the printerdestination identification module 225 may identify the appropriatedestination printer 150 based on static associations between certainattributes and certain destination printers 150.

Once the destination printer 150 and/or print server 145 has beenidentified for the print data, the print data forwarding module 230 maybe configured to forward the print data on to the identified printer 150and/or print server 145. The print data may be forwarded over a localconnection and/or over a network or logical connection. Additionally, incertain examples, the print data forwarding module 230 may be configuredto receive feedback from a printer 150 and/or a print server 145 about aspecific print job and process the feedback and/or forward the feedbackto a third party, such as the source of that particular print job.

The print server manager 205 of the central server computer system 105-amay handle certain aspects related to the distribution of drivers forprinters to the print servers 145 and the general maintenance of theprint servers 145. Accordingly, the print server manager 205 may includea driver identification module 235, a driver deployment module 240, anoperating system identification module 245, and a print serverinstantiation module 250.

The driver identification module 235 may, in response to a set of printdata being assigned to a particular printer 150, determine anappropriate driver for that printer 150. As described above with regardto FIG. 1, the appropriate driver may be selected from a centralrepository of drivers stored, for example, at data store 110. The driveridentification module 235 may be further configured to determine whetheran appropriate driver for the selected printer 150 is already installedon a print server 145 chosen to send the print data to the selectedprinter 150. In certain examples, the driver identification module 235may compare a version of the driver stored by the chosen print server145 with a version of the driver stored at the central repository todetermine whether the driver stored by the chosen print server 145 iscurrent.

In the event that a determination is made that the chosen print server145 does not have the appropriate driver or a correct version of theappropriate driver, the driver deployment module 240 may install theappropriate driver on the print server 145. In certain examples, thedriver deployment module 240 may access and write to storage associatedwith the print server 145 via a local connection, network connection,and/or a logical connection to install the appropriate driver to theprint server 145.

The operating system identification module 245 may be configured toidentify an appropriate operating system associated with an appropriatedriver for the selected printer 150. In the event that a print server145 running the appropriate operating system and in communication withthe selected printer 150 does not exist or is unavailable, the printserver instantiation module 250 may instantiate a new print server 145.The newly instantiated print server 145 may be created on a dedicated orvirtual machine by loading the appropriate operating system to thededicated or virtual machine. In certain examples, an operating systemimage having the appropriate driver preinstalled may be used toinstantiate the new print server 145.

FIG. 3 is a block diagram of one example of a data store 110-a that maybe associated with a central server computer system 105. The data store110-a shown in FIG. 3 may be an example of data store 110 shown inFIG. 1. As shown in FIG. 3, data store 110-a may store drivers 305,libraries 310, device configurations 315, tables 320, rules 325, andoperating system images 330.

Data store 110-a may maintain a repository of drivers 305 for variousprinters 150 supported by a distributed printing system 100. Inaccordance with the description of FIGS. 1-2, as a print job is receivedat the central server computer system 105, the central server computersystem 105 may associate the print job with a specific printer 150,dynamically access the data store 110 to retrieve a driver 305appropriate for the specific printer, and provide the retrieved driver305 to a print server 145 associated with the specific printer.

Because the drivers 305 are stored centrally at data store 110-a,individual machines implementing sessions 115, 125 and individual printservers 145 may not need to store a local print driver for each printersupported by the system 100. Moreover, as updated versions of drivers305 become available, a network administrator may make the updatedversions available to each print server 145 in the system by simplyupdating the repository of drivers 305 stored at the data store 110-a,thereby avoiding the need to roll out driver updates to each printserver 145 separately.

The data store 110-a may also store software libraries 310. For example,the data store 110-a may store libraries 310 associated with the drivers305. In certain embodiments, the libraries 310 may include Dynamic-LinkLibrary (DLL) or Dynamic Shared Object (DSO) files that allow the printservers 145 to dynamically communicate with the sessions 115, 125 whichgenerate the print jobs sent to printers 150. Thus, where the centralserver computer system 105 provides a driver 305 to a print server 145for a specific printer 150, the central server computer system 105 mayinclude with the driver 305 one or more DLL files for that printer 150.The DLL(s) files may allow the print server 145 to provide feedback to asession 125 from which a print job originates in a way that isunderstandable to the session 125. For instance, if a user of thesession 125 generates the print job using a print Graphical UserInterface (GUI), the DLL transmitted to the print server 145 may allowthe print server 145 to provide feedback to the user of the session 125through the print GUI.

By way of example and not limitation, consider the case where a printjob generated by a session 125 has been sent to a print server 145 forprinting by a specific printer 150, and that the printer 150 is out ofpaper. The printer 150 may send a feedback message to the print server145 indicating that the printer 150 is out of paper, and the printserver 145 may provide this feedback message to a print dialog window inthe session 125 using a DLL received from the central server computersystem 105. This process may allow for a more seamless printingexperience for a user of session 125, despite the fact that the session125 may not locally store a print driver or DLL for communicating withthe printer 150.

In certain examples, the data store 110-a may also store deviceconfigurations 315, such as settings configurations for printers 150.Thus, when the central server computer system 105 transmits a print jobto a print server 145 associated with a specific printer 150, thecentral server computer system 105 may also include in the transmissiona configuration 315 retrieved from the data store 110-a for that printer150. The configuration 315 may specify, for example, settings such asprinter margin settings, duplex settings, paper tray settings, ink colorsettings, collation settings, and the like. The configuration 315transmitted to the print server 145 by the central server computersystem 105 may be specific to the printer 150, the session 115, 125generating the print job, and/or the character or content of the printjob itself.

Additionally, the data store 110-a may store and maintain various tables320. The tables 320 may reflect certain relationships present in thesystem 100. For example, the tables 320 may include one or more tables320 associating specific sessions 115, 125 with terminal identifiers ornode identifiers, one or more tables 320 associating specific sessions115, 125 with physical locations, one or more tables 320 associatingspecific printers 150 or print servers 145 with physical locations, oneor more tables 320 associating specific sessions 115, 125 with defaultprinters 150, and/or one or more tables 320 tracking any otherassociation in the system 100 that may suit a particular implementationof the principles described herein.

In certain examples, two or more of the tables 320 stored by the datastore 110-a may be interrelated in such a way that allows for logicaldeductions in routing print jobs to print servers 145 or other usefulpurposes. For instance, the data store 110-a may include: a) a firsttable 320 associating each terminal identifier at a port with aparticular session 115, 125 at a specific physical location; and b) asecond table 320 associating each physical location for a session 115,125 with a default printer 150. In this case, the information in thefirst table 320 and the second table 320 may be used by the centralserver computer system 105 to associate a print job received at a portwith a specific default printer 150.

The data store 110-a may also include one or more rules 325 for use bythe central server computer system 105 in routing received print jobs toprint servers 145 and printers 150. As noted above in the description ofFIGS. 1-2, the rules engine 130 of the central server computer system105 may be configured to dynamically map a print job to a print server145 and printer 150 for the print job by accessing the set of rules 325stored in the data store 110-a. The rules 325 may take into accountfactors such as the location of the device generating the print job, thetype of device generating the print job, attributes of the print job,and other factors. Some of these factors may be stored in the tables320.

Additionally, the data store 110-a may include one or more operatingsystem images 330. The operating system images 330 may be used, forexample, in the dynamic creation of print servers 145. As describedabove, certain drivers 305 may not be compatible with the standardoperating systems executed by typical print servers 145 in the system100. Accordingly, when a print job is indicated for a printer 150 usingone of these drivers 305, the central server computer system 105 mayretrieve a compatible operating system image 330 from the data store110-a and instantiate a new print server 145 by loading the operatingsystem image 330 onto a real or virtual machine. The newly instantiatedprint server 145 may then receive the print job from the central servercomputer system 105 and control the indicated printer 150 using theappropriate driver 305 to complete the print job.

Turning now to FIG. 4, a block diagram is shown of an illustrativebackend 120-a for use in a distributed printing system 100. The backend120-a shown in FIG. 3 may be an example of the backend 120 shown inFIG. 1. The backend 120-a may be configured to forward print data 405 toa next destination in the printing pipeline, such as a central servercomputer system 105, a print server 145, or a printer 150, as describedin more detail below. To accomplish this functionality, the backend 120may include a receiving module 410 to receive the print data 405 from anapplication session 115, a backend routing module 415 for determiningthe next destination of the print data 405, and a transmission module425 to transmit the print data 405 to the determined next destination.In some examples, the backend 120-a may also include a rasterizationmodule 420 for rasterizing the print data 405 prior to transmitting theprint data 405 to the central server computer system 105.

The receiving module 410 of the backend 120-a may be configured toreceive the print data 405 over a channel of communication with theapplication session 115. In some examples, the channel of communicationmay include one or more local connections (e.g., serial ports, parallelports, etc.) between the backend 120-a and a device implementing theapplication session 115. Additionally or alternatively, the channel ofcommunication may include one or more network connections (e.g.,Ethernet, WiFi, etc.) and/or logical connections (e.g., where thereceiving module 410 of the backend 120-a and the application session115 are implemented by the same physical machine).

In addition to receiving the print data 405, the receiving module 410may also identify the application session 115 providing the print data405. For example, the receiving module 410 may monitor a number of portsassociated with various application sessions 115. Each of theapplication sessions 115 may be assigned a terminal identifier or a nodeidentifier. Thus, when print data 405 is received, the receiving module410 may take note of the terminal identifier, the node identifier,and/or the port on which the print data is received to associate theprint data 405 with a known application session.

The backend routing module 415 may determine the next destination of theprint data 405 based on the application session 115 from which the printdata 405 was received. To this end, the destination identificationmodule 415 may maintain a table associating specific applicationsessions 115 with specific destinations. In certain examples, such as inthe system 100 of FIG. 1, all print data 405 received at the backend120-a, regardless of source, may be transmitted by the backend 120-a toa single central server computer system 105.

In alternative examples, the backend 120-a may be communicativelycoupled to a number of separate central server computer systems 105 suchthat print data 405 from different application sessions 115 istransmitted by the backend to different central server computer systems105. In additional or alternative examples, the backend 120-a may becommunicatively coupled to one or more central server computer systems105 in addition to one or more print servers 145 such that print data405 from some application sessions 115 is transmitted to a centralserver computer system 105 and print data 405 from other applicationsessions 115 is transmitted directly to a print server 145. In theseexamples, the backend routing module 415 may determine the nextdestination of each instance of print data 405 based on the applicationsession 115 from which the print data 405 was received.

In certain examples, the backend routing module 415 may further includelogic for dynamically determining in real-time how a print job is to berouted. For example, based on certain characteristics of the print data405, the backend routing module 415 may determine that it would be moreappropriate to forward the print data 405 to a central server computersystem 105 than to a print server 145 or printer 150. Additionally oralternatively, in examples where the backend 120-a is communicativelycoupled to multiple alternative central server computer systems 105, thebackend routing module 415 may perform load balancing in itsdistribution of different print jobs between the separate central servercomputer systems 105.

As mentioned above, in certain embodiments the backend 120-a may includea rasterization module 420. The rasterization module 420 may convert thereceived print data 405 into a raster image that can be understood by aprinter. In other embodiments, the print data 405 may already have beenrasterized by the application session 115 from which the print data 405was received. In still other embodiments, the print data 405 may berasterized at a print server 145 prior to printing.

The transmission module 425 of the backend 120-a may transmit thereceived print data 405 to the destination determined by the nextdestination identification module 415. This transmission may occur overone or more local connections (e.g., serial ports, parallel ports), oneor more network connections (e.g., Ethernet, WiFi), and/or one or morelogical connections (e.g., where the backend 120 and the nextdestination are implemented by the same physical machine).

FIG. 5 illustrates a diagram of one illustrative path 500 of print data405 through a distributed printing system. The print data 405 may firstbe generated and transmitted to a central server computer system 105-bby a session 125. The central server computer system 105-b may be anexample of the central server computer system 105 of FIG. 1 or FIG. 2.The session 125 may include an application executed by a host device. Incertain examples, a user of the application issues a command to printdata generated or hosted by the application.

In certain embodiments, the session 125 may transmit the print data 405directly to the central sever computer system 105-b. Alternatively, thesession 125 may utilize a backend 120 to transmit the print data 405 tothe central server computer system 105. The central server computersystem 105-b may perform session identification 510 to determine thesource of the print data 405. For example, the central server computersystem 105-b may look up a terminal identifier and/or a port associatedwith the print data 405 in a table to identify a device from which theprint data 405 originated.

Once the source of the print data 405 is known, the central servercomputer system 105-b may perform print routing 515 on the print data405 to select an appropriate printer 150-a for the print data 405. Theprinter 150-a may be an example of one of the printers 150 shown inFIG. 1. The print routing 515 may include applying a set of rules to oneor more parameters associated with the print data 405 and/or theidentified session 125. Additionally, the central server computer system105-b may retrieve 520 an appropriate driver 305-a for the identifiedprinter 150-a from a data store 110. The driver 305-a may betransmitted, together with the print data 405, from the central servercomputer system 105-b to a print server 145-a associated with theidentified printer 150-a. The print server 145-a may be an example ofthe print server 145 shown in FIG. 1. In certain examples, as describedabove, the print server 145-a may be dynamically instantiated inresponse to a particular printer 150-a being selected for the print data405.

The print server 145-a may install 530 the driver 305-a received fromthe central server computer system 105-b to enable the print server145-a to communicate with the selected printer 150-a. Additionally, theprint server may perform spooling 535 operations to receive and collectthe print data 405, scheduling 540 operations to schedule the print data405 for printing by the printer 150-a, and one or more conversion 545operations to transform the print data into a format understood by theprinter 150-a. In certain examples, the conversion 545 operations mayinclude rasterization of the print data 405. The print server 145-a maythen transmit the print data 405 to the selected printer 150-a over alocal connection, a network connection, and/or a logical connection forprinting.

It is worth noting that while an entire distributed printing system 100has been described as a whole for the sake of context, the presentspecification is directed to methods, systems, and apparatus that may beused with, but are not tied to the system 100 of FIGS. 1-5. Individualaspects of the present specification may be broken out and usedexclusive of other aspects of the foregoing description. This will bedescribed in more detail, below.

In one set of embodiments, systems, devices, methods, and software aredescribed for distributing drivers. FIG. 6 illustrates an example of asystem 600 for driver distribution. The system 600 includes a centralserver computer system 105-c, a data store 110-b, a print server 145-b,a printer 150-b, devices 605, and a network 610. Each of thesecomponents may be in communication with each other, directly orindirectly. This system 600 may be an example of the system 100described with reference to FIG. 1.

A device 605 may be a personal computer, a workstation, a laptop, aphone, a personal digital assistant, a tablet, or any other computingdevice. A user may input a print command, and the device 605 maytransmit aspects about the print job to the central server computersystem 105-c. For example, the device 605 may transmit information aboutthe type of device 605, the application in use, the type of document tobe printed, the location of the device 605, and user preferences.

A set of drivers may be stored at data store 110-b. For example, theremay be drivers included from a number of printer manufacturers (e.g.,Hewlett Packard, Epson, Dell, Canon, and Lexmark), and for a number ofdifferent models from each. There may be the same, or different, driversstored for the device 605 and for the print server 145-b.

In some embodiments, no drivers are maintained on the device 605 or theprint server 145-b; instead, drivers are distributed on a per-print job(or per-set of print jobs) basis to both the device 605 and for theprint server 145-b. In other embodiments, the print drivers for theprint server 145-b are maintained at the print server 145-b, and thedrivers for the device 605 are distributed on a per-job (or per-set ofprint jobs) basis. In some embodiments, drivers that are used over athreshold amount (e.g., a set number of print jobs or pages per day) ata given device 605 or print server 145-b may be maintained thereon. Thethreshold may be different for different types of devices 605 and/orprint servers 145-b. For example, the threshold may be specific to aprinter type, a print server type, and/or type of device 605 generatingthe print job. When the use crosses a given threshold, one or more ofthe drivers may be uninstalled. Thus, in some examples, a subset ofdrivers may be maintained, while the rest are distributed from thecentral server computer system 105-c.

As noted above, a device 605 may transmit information or notification ofa print job to the central server computer system 105-c. The centralserver computer system 105-c may identify information about the printjob (e.g., identification and location of the applicable print server145-b and printer 150-b, and identification of the proper driver). Thecentral server computer system 105-c may identify the proper driver forthe device 605 or print server 145-b based on the received informationabout the print job.

Drivers for the print job may be transmitted to, or otherwise retrievedby, the appropriate print server 145-b and the device 605 requesting thejob. The drivers may be installed at the device 605 and print server145-b (while noting that the print server 145-b may be a virtual printserver operating as part of the central server computer system 105-c).The device 605 and print server 145-b may execute the print job with theinstalled drivers. Thus, the central server computer system 105-c mayaccess the data store 110-b to retrieve and distribute drivers to theprint server 145-b or the device 605, and thus in some embodiments thedrivers do not need to be maintained on each device or print server 145.The drivers may be taken down or uninstalled after each job orpredetermined set of jobs. In some embodiments, the drivers may beuninstalled after a period with no use, or a period with use under athreshold amount.

In some embodiments, the print server 145 may be a virtual print serverthat is dynamically generated in response to receiving notification ofthe print job at the print router 140-b. For example, consider the casewhere the central server computer system implements the print router140-b. In response to notification of the print job being received atthe central server computer system, the driver associated with adestination printer may be selected, and the driver may be installed onan image for a virtual machine. The central server computer system maythen launch the virtual machine to instantiate a print server for theselected printer, and transmit the print job to the virtual machine. Thevirtual machine may manage printing of the print job at the selecteddestination printer. Once printing has terminated, the server mayoptionally terminate or destroy the virtual machine.

FIG. 7 illustrates another system 700 for driver distribution. Thesystem 700 includes a central server computer system 105-d, a data store110-c, a print server 145-c, a printer 150-c, devices 605, and a network610. Each of these components may be in communication with each other,directly or indirectly. This system 600 may be an example of the system100 described with reference to FIG. 1 or the system 600 described withreference to FIG. 6.

In the system 700 of FIG. 7, a data store 110-c associated with thecentral server computer system 105-a stores a complete set of drivers305-a to 305-f. Additionally, the print server 145-a has access to adata store 705 to store drivers 305-a, 305-c locally. However, as shownin FIG. 7, the drivers 305-a, 305-c locally available to the printserver 145-a are only a subset of the drivers 305-a to 305-f stored bythe data store 110-a of the central server computer system 105-a. Thecentral server computer system 105-d may control which drivers 305-a,305-c the print server 145-c is permitted to store locally.Additionally, the central server computer system 105-d may periodicallyuninstall certain drivers 305-a, 305-c from the data store 705 of theprint server 145-c and/or install new drivers 305 or new versions ofdrivers 305 to the data store 705 of the print server 145-c.

As described above, in some examples the drivers 305-a, 305-c stored bythe data store 705 associated with the print server 145-c may includedrivers 305-a, 305-c that are frequently used. Additionally oralternatively, the drivers 305-a, 305-c stored by the data store 705associated with the print server 145-c may include drivers 305-a, 305-cthat the central server computer system 105-d permits the print server145-c to access locally for a defined period of time or until anexpiration condition is met.

FIG. 8 illustrates one example of a central server computer system 105-ethat may be used in a system for distributing drivers, such as thesystem 100 of FIG. 1, the system 600 of FIG. 6, or the system 700 ofFIG. 7. The central server computer system 105-e includes a rules engine130, a session manager 135, and a print router 140.

The central server computer system 105-e may be an example of thecentral server computer system 105 of FIG. 1, 2, 5, 6, or 7. The centralserver computer system 105-e may include a rules engine 130, a sessionmanager 135, a print router 140, and a print server manager 205-a. Therules engine 130, the session manager 135, and the print router 140 mayeach perform substantially the same functionality as described abovewith respect to FIG. 1 and FIG. 2. The print server manager 205-a may bean example of the print server manager 205 shown in FIG. 2.

The print server manager 205-a may be configured to coordinate variousfunctions with respect to the deployment of drivers 305 to one or moreprint servers 145. The print server manager 205-a may include a driveridentification module 235-a, a driver deployment analysis module 705, adriver deployment module 240-a, a driver removal analysis module 710, adriver removal module 715, an operating system identification module245, and a print server instantiation module 250. The operating systemidentification module 245 and the print server instantiation module 250may perform substantially the same functionality as described above inFIG. 2.

The driver identification module 235-a may be an example of the driveridentification module 235 shown in FIG. 2. The driver identificationmodule 235-a may determine a correct driver stored in a data store 110of the central server computer system 105-e for a given print job. Tothis end, the driver identification module 235-a may include a printertype analysis submodule 720 and a print job type analysis submodule 725.In certain examples, the driver identification module 235-a may includeonly one of these submodules 720.

The printer type analysis submodule 720 may be configured to determine atype of printer 150 corresponding to the print job. The type of printer150 selected for the print job may be provided to the printer typeanalysis submodule 720 by the print router 140. Once the printer type isknown, the driver identification module 235-a may query a lookup tableto identify the appropriate driver 305 for the printer 150. In certainexamples, the operating system of a selected print server 145 may alsobe taken into consideration in the determination of the appropriatedriver 305 for the printer 150.

In certain examples, more than one driver 305 may be appropriate for aparticular type of printer 150. For instance, lightweight and aheavyweight driver 305 may be available for the same printer 150, wherethe lightweight driver 305 is sufficient for managing basic print jobsand the heavyweight driver 305 provides support for advanced options andprinter functions. In this case, the print job type analysis submodule725 may identify the type of print job received by the central servercomputer system 105-e to determine which driver 305 is most appropriatefor the print job. For example, if a lightweight driver 305 providessufficient functionality for a particular print job, it may bepreferable to provide the lightweight driver 305 instead of theheavyweight driver to the print server 145 to conserve bandwidth andaccelerate the printing process.

The driver deployment analysis module 705 of the print server manager205-a may be configured to determine whether to install the driver 305identified by the driver identification module 235-a to a print server145 for a particular print job. To make this determination, the driverdeployment analysis module 705 may include an installment detectionsubmodule 730 and an update analysis submodule 735. The installmentdetection submodule 730 may query the print server 145 associated withthe print job or consult a table to determine whether the print server145 already has the identified driver 305 installed.

If it is determined that the print server 145 already has the identifieddriver 305 installed, the update analysis submodule 735 may communicatewith the print server 145 or consult a table to determine whether thedriver 305 installed on the print server 145 is a correct version. Ifthe print server 145 does not have the identified driver 305 installedor does not have the correct version of the identified driver 305installed, the driver deployment analysis module 705 may instruct thedriver deployment module 240-a to deploy the identified driver 305 tothe print server 145.

The driver deployment module 240-a may be configured to manage thedeployment and installation of the driver 305 identified by the driveridentification module 235-a to the print server 145 identified by theprint router 140. The driver deployment module 240-a may include adestination analysis submodule 740, a driver transmission submodule 745,and a print server instruction submodule 750.

The destination analysis submodule 740 may be configured to identify atarget location at print server 145 for copying the identified driver305. For example, the destination analysis submodule 740 may communicatewith the print server 145 or consult a record to determine a filestructure of the print server 145 and a location within that filestructure where the print server 145 will look for the identified driver305 when it is ready to transmit a print job to the printer 150.

The driver transmission submodule 745 may be configured to transmit adigital file containing the identified driver 305 to the target locationin the print server 145 as identified by the destination analysissubmodule 740. This transmission may be accomplished in a variety ofways, depending on the nature of the connection between the centralserver computer system 105-e and the print server 145. For example, ifthe central server computer system 105-e is connected to the printserver 145 locally, the driver 305 may be transmitted to the printserver over one or more buses. Additionally or alternatively, if thecentral server computer system 105-e is connected to the print server145 via a network connection, the driver 305 may be transmitted to theprint server 145 using one or more network packets.

The print server instruction submodule 250 may transmit instructions tothe print server related to the deployment and installation of theidentified driver 305. For example, these instructions may include ascript that the print server 145 can run to install the identifieddriver 305. Additionally or alternatively, the instructions may includeone or more specified expiration conditions and a directive to the printserver 145 to automatically remove the identified driver 305 on theoccurrence of one or more of the specified expiration conditions.Depending on the nature of communication between the central servercomputer system 105-e and the print server 145, such instructions maynot be necessary in certain examples. For example, the central servercomputer system 105-e may perform all driver installation and removaloperations for the print server 145 directly.

The driver removal analysis module 710 may be configured to determinewhether the central server computer system 105-e is to remove a driver305 that is already installed on a target print server 145. The driverremoval analysis module 710 may include a print job completion detectionsubmodule 755, a driver usage analysis submodule 760, a connection speedanalysis submodule 765, a version analysis submodule 770, and aninstallation period analysis submodule 775. It should be understood thatin certain embodiments, the driver removal analysis module 710 may onlyinclude a subset of the submodules 755, 760, 765, 770, 775 shown in FIG.7, as determined by the rules governing driver removal in a particularimplementation of the principles described herein.

The driver removal analysis module may make the ultimate determinationof whether to remove a driver installed at a print server 145 based on aweighted analysis of input from each of the submodules 755, 760, 765,770, 775. Additionally or alternatively, the driver removal analysismodule may enforce one or more priority rules to resolve conflictinginput from two or more submodules 755, 760, 765, 770, 775.

The print job completion detection submodule 755 may determine thestatus of a print job associated with the driver 305 installed on theprint server 145. In certain examples, the successful completion of aprint job may weigh in favor of removing the driver 305 from the printserver 145.

The driver usage analysis submodule 760 may be configured to evaluatethe actual or anticipated usage of the driver installed on the printserver 145. In certain examples, the central server computer system105-e may determine whether to remove the driver 305 from a print server145 based at least in part on the actual or anticipated usage of thedriver 305 by the print server 145. If the driver usage analysissubmodule 760 determines that the driver 305 does not meet certainanticipated or actual usage criteria, this determination may weigh infavor of removing the driver 305 from the print server 145.Alternatively, the driver usage analysis submodule 745 may determinethat a particular driver 305 recently installed on the print server 145in connection with a print job is an objectively popular driver 305 in asystem 100, which determination may weigh against removing the driver305 from the print server 145.

In certain examples, the driver usage analysis submodule 760 may monitorthe actual usage of the installed driver 305 by measuring the frequencywith which the print server 145 accesses and uses the installed driver305. For example, the driver usage analysis submodule 760 may determinethe number of actual uses by the print server 145 of the selected driver305 since the driver 305 was transmitted to or installed on the printserver 145. This number may be compared to a threshold minimum number ofuses such that the driver 305 is removed if the measured number of usesis smaller than the minimum number of uses of the driver 305. In certainexamples, the threshold may be dynamically computed by the driver usageanalysis submodule 760, taking into account factors such as the amountof elapsed time from when the driver 305 was transmitted to the printserver 145.

The connection speed analysis submodule 765 may be configured todetermine the data connection speed between the central server computersystem 105-e and the print server 145. This connection speed may betaken into consideration in determining whether to remove the driver 305from the print server 145. For example, if the connection speed isdetermined by the driver removal analysis module 710 to be below acertain threshold, the reinstallation of the driver 305 to the printserver 145 for future print jobs may be cost prohibitive. As such, adetermination by the connection speed analysis submodule 765 that theconnection speed is below the threshold may weigh against removing thedriver 305 from the print server 145.

The version analysis submodule 770 may be configured to determinewhether the version of the driver 305 stored by the print server 145 isa correct (e.g., up-to-date) version as defined by the central servercomputer system. In certain examples, it may be desirable to ensure thatonly current drivers 305 are stored locally by the print server 145.Thus, a determination by the version analysis submodule 770 that theprint server 145 has an out-of-date version of the driver 305 installedmay weigh in favor of removing the driver 305 from the print server 145.

The installation period analysis submodule 775 may determine the lengthof time for which the driver 305 has been installed on the print server145. In certain examples, it may be desirable to remove drivers 305 fromthe print server 145 that have been installed on the print server 145for greater than a threshold amount of time. As such, the installationperiod analysis submodule 775 may compare the period of elapsed timesince the last installation of the driver 305 on the print server to athreshold. If the period of elapsed time since the last installation isdetermined to be greater than the threshold, this determination mayweigh in favor of removal from the print server 145.

The driver removal module 715 of the print server manager 205-a mayremove from the print server 145 any driver 305 that has been indicatedfor removal by the driver removal analysis module 710. The driverremoval module 715 may include a driver location analysis submodule 780and a driver deletion submodule 785. The driver location analysissubmodule 780 may communicate with the print server 145 or consult atable to identify where the driver 305 to be removed is stored on theprint server 145. The driver deletion submodule 785 may instruct theprint server 145 to delete the driver 305 stored at the identifiedlocation or directly access the identified location to delete the driver305.

FIG. 9 is a block diagram of an illustrative print server 145-d that canbe used in a system for distributed printing. The print server 205-c maybe an example of the print server 145 shown in FIG. 1, 5, 6, or 7. Theprint server 145-d may include a driver manager 710 and a printermanager 910.

The driver manager 905 may include logic for controlling the localstorage of drivers 305 on the print server 145-d. The driver manager mayinclude a driver storage module 915, a driver installation module 920,and a driver removal module 925.

The driver storage module 915 may be configured to provide access to alocal data store used to store the drivers 305. In certain examples, thedriver storage module 915 may enforce a file structure and/or namingconvention governing how and where certain drivers 305 are stored withinthe data store. The driver storage module 915 may also provide a centralserver computer system 105 access to the data store for the installationand removal of drivers directly by the central server computer system105.

The driver installation module 920 may be configured to enable theinstallation of a driver 305 provided by the central server computersystem 105 to the local storage of the print server 145-d. The driverinstallation module 920 may include a driver receiving submodule 930 anda driver writing submodule 935. The driver receiving submodule 930 mayinclude logic for receiving a digital file containing the driver 305from the central server computer system 105 (e.g., over a local ornetwork connection). The driver writing submodule 935 may include logicfor communicating with the data storage file to write the file receivedfrom the driver 305 to a designated location in the local storage of theprint server 145-d.

The driver removal module 925 may be configured to remove an installeddriver 305 from the local storage of the print server 145-c in responseto an instruction from the central server computer system 105 or uponthe occurrence of one or more defined expiration conditions. The driverremoval module 925 may include a removal instruction receiving submodule940, an automatic removal analysis submodule 945, and a driver deletionsubmodule 950. In certain examples, the driver removal module 925 mayinclude only a subset of these submodules 940, 945, 950.

The removal instruction receiving submodule 940 may include logic forreceiving a removal instruction from the central server computer system105. The removal instruction may identify a driver 305 for removal fromthe print server 145-d. The automatic removal analysis submodule 945 mayinclude logic for storing one or more automatic expiration conditionscorresponding to one or more drivers 305 stored by the print server145-d. These automatic expiration conditions may have been received fromthe central server computer system 105 or generated locally. Theautomatic removal analysis submodule 945 may further include logic fordetermining whether one or more of the automatic conditions have beenmet with respect to a driver 305 stored by the print server 145-d todetermine whether that driver 305 should be removed from the printserver 145-d.

The driver deletion submodule 925 may include logic for communicatingwith the driver storage module 915 to delete a driver 305 from the localstorage of the print server 145-d. The driver 305 may be identified forremoval by the removal instruction receiving submodule 940 or theautomatic removal analysis submodule 945 from the local storage of theprint server 145-d.

The printer manager 910 of the print server 145-d may control thereceipt of print jobs and the distribution of the print jobs to one ormore printers 150. The printer manager 910 may include a print spoolingmodule 955, a print job scheduling module 960, a print job conversionmodule 965, a print job transmission module 970, and a printer feedbackmanagement module 975.

The print job spooling module 955 may be configured to receive and cacheprint jobs from the central server computer system 105. The print jobsmay include print jobs assigned to different printers 150 managed by theprint server 145-d. As such, the print job spooling module 955 may alsoinclude logic for receiving a printer assignment corresponding to eachreceived print job.

The print job scheduling module 960 may be configured to schedule printjobs received by the print job spooling module 955 among the printers150 to which the print jobs are assigned. The print job schedulingmodule 960 may identify the availability of the printers 150 to whichthe print jobs are assigned and schedule the print jobs based on theorder in which they were received at the print job spooling module 955or, for example, based on an order designed to increase printerthroughput.

The print job conversion module 965 may include logic for convertingprint data in a print job received at the print job spooling module 955into a format that the designated printer 150 can understand. Forexample, the print job conversion module 965 may include logic forrasterizing the print data of a print job to create a bitmap file forthe printer 150. As described above, this conversion may additionally oralternatively occur at the backend 120 or at the device 605 generatingthe print data.

The print job transmission module 970 may include logic for transmittinga scheduled print job to the printer 150 designated for that print job.This transmission may occur over a local connection, a networkconnection, and/or a logical connection.

The printer feedback management module 975 may be configured to receivefeedback from a printer 150. In certain examples, conditions (e.g., lowsupply of media, low supply of ink or toner, malfunctions) at a printer150 may affect the ability of the printer 150 to function correctly. Tocall attention to these conditions, the printer 150 may transmit afeedback message to the print server 145-d. Additionally oralternatively, a printer 150 may provide information on the status ofthe printer 150 through a feedback message transmitted to the printserver 145-d. These feedback messages from the printer 150 are receivedand processed by the printer feedback management module 975.

As described above with reference to FIG. 3, in certain examples, thecentral server computer system 105 may provide auxiliary files includingsoftware libraries (e.g., DLL files) to the print server 145-d inconnection with a driver 305. These auxiliary files may enable the printserver 145-d to forward feedback received from the printer 150 withrespect to a print job back to a device 605 that generated the printjob. The printer feedback management module 975 may include logic forreceiving and accessing these auxiliary files from the central servercomputer system 105 to provide printer feedback to the device 605.

FIG. 10 shows an illustrative method 1000 for printing in a distributedenvironment according to the principles of the present specification.The method 1000 may be performed, for example, by the central servercomputer system 105 of FIG. 1, 2, 5, 6, 7, or 8. At block 1005, driversare stored at a centralized data store. In certain examples, the driversmay include print drivers. At block 1010, a notification is received ofa print job. At block 1015, a driver corresponding to a printer isselected based on the received notification. The driver may be selectedin response to receiving the notification. At block 1020, the selecteddriver is transmitted to a print server in communication with theprinter. It is worth noting that in some embodiments the driverdistribution may, but need not be, on a per-job basis. In some cases,the driver distribution scheme, outlined above, effectively decouplesthe need for the frontend device to support the drivers.

FIG. 11 illustrates another illustrative method 1100 for printing in adistributed environment according to the principles of the presentspecification. The method 1100 may be performed, for example, by thecentral server computer system 105 of FIG. 1, 2, 5, 6, 7, or 8. At block1105, drivers are stored at a centralized data store. At block 1110, anotification is received of a print job from a network device, where thenotification includes the print data for the print job from a networkdevice. At block 1115, a driver corresponding to a printer is selectedbased on the print job. At block 1120, the selected driver istransmitted to a print server in communication with the selectedprinter. At block 1125, it is determined that the printer has completedthe print job. At block 1130, the selected driver is removed from theprint server. In some embodiments, the removal of the selected drivermay occur in response to the determination at block 1125 that theprinter has completed the print job.

FIG. 12 illustrates another illustrative method 1200 for printing in adistributed environment according to the principles of the presentspecification. The method 1200 may be performed, for example, by thecentral server computer system 105 of FIG. 1, 2, 5, 6, 7, or 8. At block1205, drivers are stored at a centralized data store. At block 1210, anotification is received of a print job from a network device, where thenotification includes the print data for the print job from a networkdevice. At block 1215, a driver corresponding to a printer is selectedbased on the print job. At block 1220, the selected driver istransmitted to a print server in communication with the selectedprinter.

At block 1225, a usage of the selected driver by the print server ismonitored. At block 1230, a determination is made as to whether themonitored usage of the selected driver by the print server crosses athreshold. If the threshold is crossed, the selected driver is removedfrom the print server at block 1235. Otherwise, flow returns to block1225 where the usage of the selected driver by the print servercontinues to be monitored until the threshold is crossed.

FIG. 13 illustrates another illustrative method 1300 for printing in adistributed environment according to the principles of the presentspecification. The method 1300 may be performed, for example, by thecentral server computer system 105 of FIG. 1, 2, 5, 6, 7, or 8. At block1305, drivers are stored at a centralized data store. At block 1310, anotification is received of a print job from a network device, where thenotification includes the print data for the print job from a networkdevice. At block 1315, a driver corresponding to a printer is selectedbased on the print job. At block 1320, the selected driver istransmitted to a print server in communication with the selectedprinter.

At block 1325, a determination is made as to whether it is anticipatedthat the print server will frequently use the selected driver. Iffrequent use of the selected driver is not anticipated, the selecteddriver is removed from the print server at block 1335. If frequent useof the selected driver is anticipated, the selected driver is allowed toremain installed on the print server at block 1330. In certain examples,the determination at block 1325 may reoccur at a later point in time ifthe selected driver is allowed to remain installed on the print server.

FIG. 14 illustrates another illustrative method 1400 for printing in adistributed environment according to the principles of the presentspecification. The method 1400 may be performed, for example, by thecentral server computer system 105 of FIG. 1, 2, 5, 6, 7, or 8. At block1405, a plurality of drivers is stored at a centralized data store. Atblock 1410, notification of a print job is received at a central servercomputer system. At block 1415, a driver corresponding to a printer isselected from the plurality of drivers based on the receivednotification of the print job. At block 1420, the selected driver isinstalled to the virtual machine. At block 1425, the virtual machine islaunched by the central server computer system. In certain examples, thevirtual machine may be launched by commencing execution of a softwareimage corresponding to the virtual machine using a hypervisor orhardware emulator. At block 1430, the print job is transmitted to thevirtual machine. At block 1435, the virtual machine is terminated by thecentral server computer system in response to a determination that theprint job has completed.

FIG. 15 illustrates another illustrative method 1500 for printing in adistributed environment according to the principles of the presentspecification. The method 1500 may be performed, for example, by theprint server 145 of FIG. 1, 5, 6, 7, or 9. At block 1505, a driverselected for a print job is received at the print server from acentralized data store. At block 1510, the selected driver is installedon the print server. At block 1515, the print job is transmitted fromthe print server to a printer using the selected driver.

FIG. 16 illustrates another illustrative method 1600 for printing in adistributed environment according to the principles of the presentspecification. The method 1600 may be performed, for example, by theprint server 145 of FIG. 1, 5, 6, 7, or 9. At block 1605, a driverselected for a print job is received at the print server from acentralized data store associated with a central server computer system.At block 1610, the print job is received at the print server from thecentral server computer system. At block 1615, the selected driver isinstalled on the print server. At block 1620, the print job istransmitted from the print server to a printer using the selecteddriver. At block 1625, it is determined that the printer has completedthe print job, and at block 1630 the selected driver is removed from theprint server. In certain examples, the selected driver may be removedfrom the print server in response to the determination that the printerhas completed the print job.

FIG. 17 illustrates another illustrative method 1700 for printing in adistributed environment according to the principles of the presentspecification. The method 1700 may be performed, for example, by theprint server 145 of FIG. 1, 5, 6, 7, or 9. At block 1705, a driverselected for a print job is received at the print server from acentralized data store associated with a central server computer system.At block 1710, the print job is received at the print server from thecentral server computer system. At block 1715, a condition for removingthe selected driver from the print server is received at the printserver. At block 1720, the selected driver is installed on the printserver. At block 1725, the print job is transmitted from the printserver to a printer using the selected driver. At block 1730, it isdetermined that the condition for removing the driver from the printserver has been met, and at block 1735 the selected driver is removedfrom the print server. In certain examples, the selected driver may beremoved from the print server in response to the determination that thecondition for removing the driver from the print server has been met.

The functionality of the central server computer system 105 of FIG. 1,2, 5, 6, 7, or 8, the print router 140 of FIG. 1, 2, or 8, the rulesengine 130 of FIG. 1, 2, or 8, the print server 145 of FIG. 1, 5, 6, or9, the backend 120 of FIG. 1 or 4, or the device 605 of FIG. 6, 8, or 9,may, individually or collectively, be implemented with one or moreApplication Specific Integrated Circuits (ASICs) adapted to perform someor all of the applicable functions in hardware. Alternatively, thefunctions may be performed by one or more other processing units (orcores), on one or more integrated circuits. In other embodiments, othertypes of integrated circuits may be used (e.g., Structured/PlatformASICs, Field Programmable Gate Arrays (FPGAs), and other Semi-CustomICs), which may be programmed in any manner known in the art. Thefunctions of each unit may also be implemented, in whole or in part,with instructions embodied in a memory, formatted to be executed by oneor more general or application-specific processors.

A device structure 1800 that may be used for one or more components ofthe central server computer system 105 of the central server computersystem 105 of FIG. 1, 2, 5, 6, 7, or 8, the print router 140 of FIG. 1,2, or 8, the rules engine 130 of FIG. 1, 2, or 8, the print server 145of FIG. 1, 5, 6, or 9, the backend 120 of FIG. 1 or 4, or the device 605of FIG. 6, 8, or 9, or for other computing devices or printers describedherein, is illustrated with the schematic diagram of FIG. 18.

This drawing broadly illustrates how individual system elements of eachof the aforementioned devices may be implemented, whether in a separatedor more integrated manner. Thus, any or all of the various components ofone of the aforementioned devices may be combined in a single unit orseparately maintained and can further be distributed in multiplegroupings or physical units or across multiple locations. The examplestructure shown is made up of hardware elements that are electricallycoupled via bus 1805, including processor(s) 1810 (which may furthercomprise a digital signal processor (DSP) or special-purpose processor),storage device(s) 1815, input device(s) 1820, and output device(s) 1825.The storage device(s) 1815 may be a machine-readable storage mediareader connected to any machine-readable storage medium, the combinationcomprehensively representing remote, local, fixed, or removable storagedevices or storage media for temporarily or more permanently containingcomputer-readable information. The communications system(s) interface1845 may interface to a wired, wireless, or other type of interfacingconnection that permits data to be exchanged with other devices. Thecommunications system(s) interface 1845 may permit data to be exchangedwith a network.

The structure 1800 may also include additional software elements, shownas being currently located within working memory 1830, including anoperating system 1835 and other code 1840, such as programs orapplications designed to implement methods of the invention. It will beapparent to those skilled in the art that substantial variations may beused in accordance with specific requirements. For example, customizedhardware might also be used, or particular elements might be implementedin hardware, software (including portable software, such as applets), orboth.

It should be noted that the methods, systems and devices discussed aboveare intended merely to be examples. It must be stressed that variousembodiments may omit, substitute, or add various procedures orcomponents as appropriate. For instance, it should be appreciated that,in alternative embodiments, the methods may be performed in an orderdifferent from that described, and that various steps may be added,omitted or combined. Also, features described with respect to certainembodiments may be combined in various other embodiments. Differentaspects and elements of the embodiments may be combined in a similarmanner. Also, it should be emphasized that technology evolves and, thus,many of the elements are exemplary in nature and should not beinterpreted to limit the scope of the invention.

Specific details are given in the description to provide a thoroughunderstanding of the embodiments. However, it will be understood by oneof ordinary skill in the art that the embodiments may be practicedwithout these specific details. For example, well-known circuits,processes, algorithms, structures, and techniques have been shownwithout unnecessary detail in order to avoid obscuring the embodiments.

Also, it is noted that the embodiments may be described as a processwhich is depicted as a flow diagram or block diagram. Although each maydescribe the operations as a sequential process, many of the operationscan be performed in parallel or concurrently. In addition, the order ofthe operations may be rearranged. A process may have additional stepsnot included in the figure.

Moreover, as disclosed herein, the term “memory” or “memory unit” mayrepresent one or more devices for storing data, including read-onlymemory (ROM), random access memory (RAM), magnetic RAM, core memory,magnetic disk storage mediums, optical storage mediums, flash memorydevices or other computer-readable mediums for storing information. Theterm “computer-readable medium” includes, but is not limited to,portable or fixed storage devices, optical storage devices, wirelesschannels, a sim card, other smart cards, and various other mediumscapable of storing, containing or carrying instructions or data.

Furthermore, embodiments may be implemented by hardware, software,firmware, middleware, microcode, hardware description languages, or anycombination thereof. When implemented in software, firmware, middlewareor microcode, the program code or code segments to perform the necessarytasks may be stored in a computer-readable medium such as a storagemedium. Processors may perform the necessary tasks.

Having described several embodiments, it will be recognized by those ofskill in the art that various modifications, alternative constructions,and equivalents may be used without departing from the spirit of theinvention. For example, the above elements may merely be a component ofa larger system, wherein other rules may take precedence over orotherwise modify the application of the invention. Also, a number ofsteps may be undertaken before, during, or after the above elements areconsidered. Accordingly, the above description should not be taken aslimiting the scope of the invention.

1. A distributed printing system, comprising: a data store comprising aplurality of stored drivers; a central server computer systemcommunicatively coupled to the data store, wherein the central servercomputer system is configured to: receive a notification of a print job;and select a driver from the plurality of stored drivers of the datastore based on the received notification of the print job; and a printserver communicatively coupled to the centralized data store, whereinthe print server is configured to receive the selected driver andtransmit the print job to a printer using the selected driver.
 2. Thedistributed printing system of claim 1, wherein the central servercomputer system is further configured to: determine that the printer hascompleted the print job; and remove the selected driver from the printserver.
 3. The distributed printing system of claim 1, wherein thecentral server computer system is further configured to: monitor a usageof the selected driver by the print server; and remove the selecteddriver from the print server in response to the monitored usage of theselected driver crossing a threshold.
 4. The distributed printing systemof claim 1, wherein the central server computer system is furtherconfigured to allow the selected driver to remain installed on the printserver based on an anticipated frequency of use associated with theselected driver.
 5. The distributed printing system of claim 1, whereinthe threshold comprises a minimum number of uses by the print server ofthe selected driver since a time of the print server receiving theselected driver, wherein the central server computer system is furtherconfigured to: determine that an actual number of uses by the printserver of the selected driver since the time of the print serverreceiving the selected driver is smaller than the minimum number ofuses; and remove the selected driver from the print server in responseto an actual number of uses by the print server of the selected driversince transmitting the selected driver to the print server being smallerthan the minimum number of uses.
 6. A method of printing in adistributed printing environment, comprising: storing a plurality ofdrivers at a centralized data store; receiving notification of a printjob; selecting a driver corresponding to a printer from the plurality ofdrivers based on the received notification of the print job; andtransmitting the selected driver to a print server in communication withthe printer.
 7. The method of claim 6, further comprising: determiningthat the printer has completed the print job; and removing the selecteddriver from the print server.
 8. The method of claim 6, furthercomprising: removing the selected driver from the print server inresponse to a determination that the print server has been in possessionof the selected driver for greater than a threshold amount of time. 9.The method of claim 6, further comprising: allowing the selected driverto remain installed on the print server based on a frequency of useassociated with the selected driver.
 10. The method of claim 6, furthercomprising: selecting the selected driver based on at least onecharacteristic of the print job.
 11. The method of claim 6, furthercomprising: monitoring a usage of the selected driver by the printserver; and removing the selected driver from the print server inresponse to the monitored usage of the selected driver crossing athreshold.
 12. The method of claim 6, wherein the threshold is based onat least one of: a type of the printer, a type of the print server, or atype of a device generating the print job.
 13. The method of claim 6,wherein the threshold comprises a minimum number of uses by the printserver of the selected driver since a time of the print server receivingthe selected driver, the method further comprising: determining that anactual number of uses by the print server of the selected driver sincethe time of the print server receiving the selected driver is smallerthan the minimum number of uses; and removing the selected driver fromthe print server in response to an actual number of uses by the printserver of the selected driver since transmitting the selected driver tothe print server being smaller than the minimum number of uses.
 14. Themethod of claim 6, further comprising: transmitting the print job to theprint server together with the selected driver.
 15. The method of claim6, further comprising: receiving the notification of the print job at acentral server computer system; selecting the driver at the centralserver computer system; installing the driver to a virtual machine;launching the virtual machine with the central server computer system;transmitting the print job to the virtual machine; and terminating thevirtual machine with the central server computer system in response to adetermination that the print job has completed.
 16. A method of printingin a distributed printing environment, comprising: receiving, at a printserver, a driver selected for a print job from a centralized data storeexternal to the print server; installing the selected driver on theprint server; and transmitting the print job from the print server to aprinter using the selected driver.
 17. The method of claim 16, furthercomprising: receiving the print job at the print server from a centralserver computer system in connection with receiving the selected driverat the print server from the central server computer system.
 18. Themethod of claim 16, further comprising: removing the selected driverfrom the print server after transmitting the print job to the printserver.
 19. The method of claim 16, further comprising: receiving at theprint server a condition for removing the selected driver from the printserver.
 20. The method of claim 19, further comprising: removing theselected driver from the print server in response to a determinationthat the condition has been met.